package cn.kgc.test;

import java.lang.reflect.Field;
import java.util.ArrayList;

/**
 * 验证arraylist的初始化容量和扩容机制和扩容时机  1.5倍
 * 反射
 */
public class App {

    public static void main( String[] args ) {

        ArrayList<String> list = new ArrayList<>();
        Class clazz = list.getClass();

        //elementData
        try {
            Field elementData = clazz.getDeclaredField("elementData");
            elementData.setAccessible(true);
            Object[] o = (Object[]) elementData.get(list);
            System.out.println("-----------ArrayList的初始化容量--------------");
            System.out.println("o = " + o.length);
            System.out.println("-----------ArrayList的添加第一个元素后 容量大小--------------");
            list.add("aa");
            o = (Object[]) elementData.get(list);
            System.out.println("o = " + o.length);
            System.out.println("-----------ArrayList的添加第10个元素后 容量大小--------------");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            list.add("aa");
            o = (Object[]) elementData.get(list);
            System.out.println("o = " + o.length);

            System.out.println("-----------ArrayList的添加第11个元素后 容量大小--------------");
            list.add("aa");
            o = (Object[]) elementData.get(list);
            System.out.println("o = " + o.length);

        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
